package com.rui.interpreter.main;

import org.springframework.expression.Expression;
import org.springframework.expression.ExpressionParser;
import org.springframework.expression.spel.standard.SpelExpressionParser;

/**
 * 解释器模式（interpreter pattern）
 * 解释器模式给定一个语言，定义它的文法的一种表示，并定义一个解释器，这个解释器使用该表示来解释语言中的句子。
 * <p>
 * 特征：为了解释一种语言，而为语言创建的解释器。
 *
 * @author ZhangRui
 * @date 2023/03/03 17:27
 **/
public class Main {

    public static void main(String[] args) {

        // spring 解释器模式
        ExpressionParser expressionParser = new SpelExpressionParser();
        Expression expression = expressionParser.parseExpression("10 + 20 + 30 * 4");
        Integer value = expression.getValue(Integer.class);
        // 150
        System.out.println(value);
        expression = expressionParser.parseExpression("(10+20+30)*4");
        value = expression.getValue(Integer.class);
        // 240
        System.out.println(value);
    }
}
